package lispinterpreter;

/**
 * 
 * @author setian
 */
public class Atom {

    // Atributos
    public final int tipo;
    public float fatom; // 1
    public boolean batom; // 2
    public String satom = null; // 3

    // Constructor
    public Atom(String cadena) {
	satom = cadena;
	tipo = 0;
    }

    public Atom(float num) {
	fatom = num;
	tipo = 1;
    }

    public Atom(boolean booleano) {
	batom = booleano;
	tipo = 2;
    }

    // TODO ver si es posible usar genéricos para reemplazar los múltiples tipos
    public int getTipo() {
	return tipo;
    }

    /**
     * Devuelve en contenido del átmo. Puede ser un string, boolean o float
     */
    public void printAtom() {
	if (tipo == 2) { // Es boolean
	    if (batom) {
		System.out.println("T "); // True
	    } else {
		System.out.println("NIL"); // False
	    }
	} else {
	    if (tipo == 1) { // Float
		System.out.println("" + fatom); // Imprime el float
	    } else {
		System.out.println(satom); // String atom
	    }
	}
    }
}
